#include <iostream>
#include <unordered_map>
#include <fstream>
#include <vector>
#include <map>
#include <set>
#include <sstream>
using namespace std;
//实现的是通过读取文件，可以找到每一个单词出现的次数，并将次数存在文件里面
class TextQuery{
public:
    //先打开文件
    void readFile(const string & filename){
        ifstream ifs(filename);
        if(!ifs){
            return;
        }
    //解析每一行
    int linenumber=0;
    string line;
    while(getline(ifs,line)){
        ++linenumber;
        _line.push_back(line);
        istringstream iss(line);
        string word;
        //将每一个单词存放到word里面，记录行号，单词出现次数加一
        while(iss>>word){
            _wordlinenumber[word].insert(linenumber);
            ++_wordcout[word];
        }
    }
    }
    
    void query(const string & word){
        cout<<word<<"occurs"<<_wordcout[word]<<"time"<<endl;
        for(auto &ele:_wordlinenumber[word]){
            cout<<"(line"<<ele<<")";
            cout<<_line[ele-1]<endl;
        }
    }
    private:
    //每一行的原始数据
    vector<string> _line;
    //每一个单词对应的行号
    map<string,set<int>> _wordlinenumber;
    //每一个单词出现的总次数
    map<string,int> _wordcout;

};
void test(){
    TextQuery text;
    text.readFile("The_Holy_Bible.txt");
}
int main(int argc, char * argv[]){
    test();    
    return 0;
}

